1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 4 2; RUN: llc --relocation-model=pic -code-model=small < %s | FileCheck %s 3; RUN: llc --relocation-model=pic -code-model=medium < %s | FileCheck %s 4; RUN: llc --relocation-model=pic -code-model=large < %s | FileCheck %s --check-prefix=LARGE 5 6target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" 7target triple = "x86_64-unknown-linux-gnu" 8 9@global = external global i32 10declare void @func() 11 12define ptr @global_addr() #0 { 13; CHECK-LABEL: global_addr: 14; CHECK: # %bb.0: 15; CHECK-NEXT: movq global@GOTPCREL_NORELAX(%rip), %rax 16; CHECK-NEXT: retq 17; 18; LARGE-LABEL: global_addr: 19; LARGE: # %bb.0: 20; LARGE-NEXT: .L0$pb: 21; LARGE-NEXT: leaq .L0$pb(%rip), %rax 22; LARGE-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L0$pb, %rcx 23; LARGE-NEXT: addq %rax, %rcx 24; LARGE-NEXT: movabsq $global@GOT, %rax 25; LARGE-NEXT: movq (%rcx,%rax), %rax 26; LARGE-NEXT: retq 27 ret ptr @global 28} 29 30define i32 @global_load() #0 { 31; CHECK-LABEL: global_load: 32; CHECK: # %bb.0: 33; CHECK-NEXT: movq global@GOTPCREL_NORELAX(%rip), %rax 34; CHECK-NEXT: movl (%rax), %eax 35; CHECK-NEXT: retq 36; 37; LARGE-LABEL: global_load: 38; LARGE: # %bb.0: 39; LARGE-NEXT: .L1$pb: 40; LARGE-NEXT: leaq .L1$pb(%rip), %rax 41; LARGE-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L1$pb, %rcx 42; LARGE-NEXT: addq %rax, %rcx 43; LARGE-NEXT: movabsq $global@GOT, %rax 44; LARGE-NEXT: movq (%rcx,%rax), %rax 45; LARGE-NEXT: movl (%rax), %eax 46; LARGE-NEXT: retq 47 %load = load i32, ptr @global 48 ret i32 %load 49} 50 51define void @global_store() #0 { 52; CHECK-LABEL: global_store: 53; CHECK: # %bb.0: 54; CHECK-NEXT: movq global@GOTPCREL_NORELAX(%rip), %rax 55; CHECK-NEXT: movl $0, (%rax) 56; CHECK-NEXT: retq 57; 58; LARGE-LABEL: global_store: 59; LARGE: # %bb.0: 60; LARGE-NEXT: .L2$pb: 61; LARGE-NEXT: leaq .L2$pb(%rip), %rax 62; LARGE-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L2$pb, %rcx 63; LARGE-NEXT: addq %rax, %rcx 64; LARGE-NEXT: movabsq $global@GOT, %rax 65; LARGE-NEXT: movq (%rcx,%rax), %rax 66; LARGE-NEXT: movl $0, (%rax) 67; LARGE-NEXT: retq 68 store i32 0, ptr @global 69 ret void 70} 71 72define ptr @func_addr() #0 { 73; CHECK-LABEL: func_addr: 74; CHECK: # %bb.0: 75; CHECK-NEXT: movq func@GOTPCREL(%rip), %rax 76; CHECK-NEXT: retq 77; 78; LARGE-LABEL: func_addr: 79; LARGE: # %bb.0: 80; LARGE-NEXT: .L3$pb: 81; LARGE-NEXT: leaq .L3$pb(%rip), %rax 82; LARGE-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L3$pb, %rcx 83; LARGE-NEXT: addq %rax, %rcx 84; LARGE-NEXT: movabsq $func@GOT, %rax 85; LARGE-NEXT: movq (%rcx,%rax), %rax 86; LARGE-NEXT: retq 87 ret ptr @func 88} 89 90attributes #0 = { "target-features"="+tagged-globals" } 91