1
1
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 4
2
- ; RUN: llc --relocation-model=pic < %s | FileCheck %s
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
3
5
4
6
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
5
7
target triple = "x86_64-unknown-linux-gnu"
@@ -12,6 +14,16 @@ define ptr @global_addr() #0 {
12
14
; CHECK: # %bb.0:
13
15
; CHECK-NEXT: movq global@GOTPCREL_NORELAX(%rip), %rax
14
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
15
27
ret ptr @global
16
28
}
17
29
@@ -21,6 +33,17 @@ define i32 @global_load() #0 {
21
33
; CHECK-NEXT: movq global@GOTPCREL_NORELAX(%rip), %rax
22
34
; CHECK-NEXT: movl (%rax), %eax
23
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
24
47
%load = load i32 , ptr @global
25
48
ret i32 %load
26
49
}
@@ -31,6 +54,17 @@ define void @global_store() #0 {
31
54
; CHECK-NEXT: movq global@GOTPCREL_NORELAX(%rip), %rax
32
55
; CHECK-NEXT: movl $0, (%rax)
33
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
34
68
store i32 0 , ptr @global
35
69
ret void
36
70
}
@@ -40,6 +74,16 @@ define ptr @func_addr() #0 {
40
74
; CHECK: # %bb.0:
41
75
; CHECK-NEXT: movq func@GOTPCREL(%rip), %rax
42
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
43
87
ret ptr @func
44
88
}
45
89
0 commit comments