@@ -37,6 +37,7 @@ target triple = "x86_64--linux"
37
37
38
38
@global_data = dso_local global [10 x i32 ] [i32 1 , i32 2 , i32 0 , i32 0 , i32 0 , i32 0 , i32 0 , i32 0 , i32 0 , i32 0 ], align 16
39
39
@static_data = internal global [10 x i32 ] zeroinitializer , align 16
40
+ @always_large_static_data = internal global [10 x i32 ] zeroinitializer , align 16 , large
40
41
@extern_data = external global [10 x i32 ], align 16
41
42
@thread_data = external thread_local global i32 , align 4
42
43
@unknown_size_data = dso_local global [0 x i32 ] zeroinitializer , align 16
@@ -87,6 +88,53 @@ define dso_local ptr @lea_static_data() #0 {
87
88
ret ptr @static_data
88
89
}
89
90
91
+ define dso_local ptr @lea_always_large_static_data () #0 {
92
+ ; SMALL-STATIC-LABEL: lea_always_large_static_data:
93
+ ; SMALL-STATIC: # %bb.0:
94
+ ; SMALL-STATIC-NEXT: movl $always_large_static_data, %eax
95
+ ; SMALL-STATIC-NEXT: retq
96
+ ;
97
+ ; MEDIUM-STATIC-LABEL: lea_always_large_static_data:
98
+ ; MEDIUM-STATIC: # %bb.0:
99
+ ; MEDIUM-STATIC-NEXT: movabsq $always_large_static_data, %rax
100
+ ; MEDIUM-STATIC-NEXT: retq
101
+ ;
102
+ ; LARGE-STATIC-LABEL: lea_always_large_static_data:
103
+ ; LARGE-STATIC: # %bb.0:
104
+ ; LARGE-STATIC-NEXT: movabsq $always_large_static_data, %rax
105
+ ; LARGE-STATIC-NEXT: retq
106
+ ;
107
+ ; SMALL-PIC-LABEL: lea_always_large_static_data:
108
+ ; SMALL-PIC: # %bb.0:
109
+ ; SMALL-PIC-NEXT: leaq always_large_static_data(%rip), %rax
110
+ ; SMALL-PIC-NEXT: retq
111
+ ;
112
+ ; MEDIUM-SMALL-DATA-PIC-LABEL: lea_always_large_static_data:
113
+ ; MEDIUM-SMALL-DATA-PIC: # %bb.0:
114
+ ; MEDIUM-SMALL-DATA-PIC-NEXT: leaq _GLOBAL_OFFSET_TABLE_(%rip), %rcx
115
+ ; MEDIUM-SMALL-DATA-PIC-NEXT: movabsq $always_large_static_data@GOTOFF, %rax
116
+ ; MEDIUM-SMALL-DATA-PIC-NEXT: addq %rcx, %rax
117
+ ; MEDIUM-SMALL-DATA-PIC-NEXT: retq
118
+ ;
119
+ ; MEDIUM-PIC-LABEL: lea_always_large_static_data:
120
+ ; MEDIUM-PIC: # %bb.0:
121
+ ; MEDIUM-PIC-NEXT: leaq _GLOBAL_OFFSET_TABLE_(%rip), %rcx
122
+ ; MEDIUM-PIC-NEXT: movabsq $always_large_static_data@GOTOFF, %rax
123
+ ; MEDIUM-PIC-NEXT: addq %rcx, %rax
124
+ ; MEDIUM-PIC-NEXT: retq
125
+ ;
126
+ ; LARGE-PIC-LABEL: lea_always_large_static_data:
127
+ ; LARGE-PIC: # %bb.0:
128
+ ; LARGE-PIC-NEXT: .L1$pb:
129
+ ; LARGE-PIC-NEXT: leaq .L1$pb(%rip), %rax
130
+ ; LARGE-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L1$pb, %rcx
131
+ ; LARGE-PIC-NEXT: addq %rax, %rcx
132
+ ; LARGE-PIC-NEXT: movabsq $always_large_static_data@GOTOFF, %rax
133
+ ; LARGE-PIC-NEXT: addq %rcx, %rax
134
+ ; LARGE-PIC-NEXT: retq
135
+ ret ptr @always_large_static_data
136
+ }
137
+
90
138
define dso_local ptr @lea_global_data () #0 {
91
139
; SMALL-STATIC-LABEL: lea_global_data:
92
140
; SMALL-STATIC: # %bb.0:
@@ -122,9 +170,9 @@ define dso_local ptr @lea_global_data() #0 {
122
170
;
123
171
; LARGE-PIC-LABEL: lea_global_data:
124
172
; LARGE-PIC: # %bb.0:
125
- ; LARGE-PIC-NEXT: .L1 $pb:
126
- ; LARGE-PIC-NEXT: leaq .L1 $pb(%rip), %rax
127
- ; LARGE-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L1 $pb, %rcx
173
+ ; LARGE-PIC-NEXT: .L2 $pb:
174
+ ; LARGE-PIC-NEXT: leaq .L2 $pb(%rip), %rax
175
+ ; LARGE-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L2 $pb, %rcx
128
176
; LARGE-PIC-NEXT: addq %rax, %rcx
129
177
; LARGE-PIC-NEXT: movabsq $global_data@GOTOFF, %rax
130
178
; LARGE-PIC-NEXT: addq %rcx, %rax
@@ -165,9 +213,9 @@ define dso_local ptr @lea_extern_data() #0 {
165
213
;
166
214
; LARGE-PIC-LABEL: lea_extern_data:
167
215
; LARGE-PIC: # %bb.0:
168
- ; LARGE-PIC-NEXT: .L2 $pb:
169
- ; LARGE-PIC-NEXT: leaq .L2 $pb(%rip), %rax
170
- ; LARGE-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L2 $pb, %rcx
216
+ ; LARGE-PIC-NEXT: .L3 $pb:
217
+ ; LARGE-PIC-NEXT: leaq .L3 $pb(%rip), %rax
218
+ ; LARGE-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L3 $pb, %rcx
171
219
; LARGE-PIC-NEXT: addq %rax, %rcx
172
220
; LARGE-PIC-NEXT: movabsq $extern_data@GOT, %rax
173
221
; LARGE-PIC-NEXT: movq (%rcx,%rax), %rax
@@ -212,9 +260,9 @@ define dso_local ptr @lea_unknown_size_data() #0 {
212
260
;
213
261
; LARGE-PIC-LABEL: lea_unknown_size_data:
214
262
; LARGE-PIC: # %bb.0:
215
- ; LARGE-PIC-NEXT: .L3 $pb:
216
- ; LARGE-PIC-NEXT: leaq .L3 $pb(%rip), %rax
217
- ; LARGE-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L3 $pb, %rcx
263
+ ; LARGE-PIC-NEXT: .L4 $pb:
264
+ ; LARGE-PIC-NEXT: leaq .L4 $pb(%rip), %rax
265
+ ; LARGE-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L4 $pb, %rcx
218
266
; LARGE-PIC-NEXT: addq %rax, %rcx
219
267
; LARGE-PIC-NEXT: movabsq $unknown_size_data@GOTOFF, %rax
220
268
; LARGE-PIC-NEXT: addq %rcx, %rax
@@ -260,9 +308,9 @@ define dso_local i32 @load_global_data() #0 {
260
308
;
261
309
; LARGE-PIC-LABEL: load_global_data:
262
310
; LARGE-PIC: # %bb.0:
263
- ; LARGE-PIC-NEXT: .L4 $pb:
264
- ; LARGE-PIC-NEXT: leaq .L4 $pb(%rip), %rax
265
- ; LARGE-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L4 $pb, %rcx
311
+ ; LARGE-PIC-NEXT: .L5 $pb:
312
+ ; LARGE-PIC-NEXT: leaq .L5 $pb(%rip), %rax
313
+ ; LARGE-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L5 $pb, %rcx
266
314
; LARGE-PIC-NEXT: addq %rax, %rcx
267
315
; LARGE-PIC-NEXT: movabsq $global_data@GOTOFF, %rax
268
316
; LARGE-PIC-NEXT: movl 8(%rcx,%rax), %eax
@@ -310,9 +358,9 @@ define dso_local i32 @load_extern_data() #0 {
310
358
;
311
359
; LARGE-PIC-LABEL: load_extern_data:
312
360
; LARGE-PIC: # %bb.0:
313
- ; LARGE-PIC-NEXT: .L5 $pb:
314
- ; LARGE-PIC-NEXT: leaq .L5 $pb(%rip), %rax
315
- ; LARGE-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L5 $pb, %rcx
361
+ ; LARGE-PIC-NEXT: .L6 $pb:
362
+ ; LARGE-PIC-NEXT: leaq .L6 $pb(%rip), %rax
363
+ ; LARGE-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L6 $pb, %rcx
316
364
; LARGE-PIC-NEXT: addq %rax, %rcx
317
365
; LARGE-PIC-NEXT: movabsq $extern_data@GOT, %rax
318
366
; LARGE-PIC-NEXT: movq (%rcx,%rax), %rax
@@ -361,9 +409,9 @@ define dso_local i32 @load_unknown_size_data() #0 {
361
409
;
362
410
; LARGE-PIC-LABEL: load_unknown_size_data:
363
411
; LARGE-PIC: # %bb.0:
364
- ; LARGE-PIC-NEXT: .L6 $pb:
365
- ; LARGE-PIC-NEXT: leaq .L6 $pb(%rip), %rax
366
- ; LARGE-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L6 $pb, %rcx
412
+ ; LARGE-PIC-NEXT: .L7 $pb:
413
+ ; LARGE-PIC-NEXT: leaq .L7 $pb(%rip), %rax
414
+ ; LARGE-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L7 $pb, %rcx
367
415
; LARGE-PIC-NEXT: addq %rax, %rcx
368
416
; LARGE-PIC-NEXT: movabsq $unknown_size_data@GOTOFF, %rax
369
417
; LARGE-PIC-NEXT: movl 8(%rcx,%rax), %eax
@@ -421,9 +469,9 @@ define dso_local ptr @lea_static_fn() #0 {
421
469
;
422
470
; LARGE-PIC-LABEL: lea_static_fn:
423
471
; LARGE-PIC: # %bb.0:
424
- ; LARGE-PIC-NEXT: .L9 $pb:
425
- ; LARGE-PIC-NEXT: leaq .L9 $pb(%rip), %rax
426
- ; LARGE-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L9 $pb, %rcx
472
+ ; LARGE-PIC-NEXT: .L10 $pb:
473
+ ; LARGE-PIC-NEXT: leaq .L10 $pb(%rip), %rax
474
+ ; LARGE-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L10 $pb, %rcx
427
475
; LARGE-PIC-NEXT: addq %rax, %rcx
428
476
; LARGE-PIC-NEXT: movabsq $static_fn@GOTOFF, %rax
429
477
; LARGE-PIC-NEXT: addq %rcx, %rax
@@ -464,9 +512,9 @@ define dso_local ptr @lea_global_fn() #0 {
464
512
;
465
513
; LARGE-PIC-LABEL: lea_global_fn:
466
514
; LARGE-PIC: # %bb.0:
467
- ; LARGE-PIC-NEXT: .L10 $pb:
468
- ; LARGE-PIC-NEXT: leaq .L10 $pb(%rip), %rax
469
- ; LARGE-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L10 $pb, %rcx
515
+ ; LARGE-PIC-NEXT: .L11 $pb:
516
+ ; LARGE-PIC-NEXT: leaq .L11 $pb(%rip), %rax
517
+ ; LARGE-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L11 $pb, %rcx
470
518
; LARGE-PIC-NEXT: addq %rax, %rcx
471
519
; LARGE-PIC-NEXT: movabsq $global_fn@GOTOFF, %rax
472
520
; LARGE-PIC-NEXT: addq %rcx, %rax
@@ -507,9 +555,9 @@ define dso_local ptr @lea_extern_fn() #0 {
507
555
;
508
556
; LARGE-PIC-LABEL: lea_extern_fn:
509
557
; LARGE-PIC: # %bb.0:
510
- ; LARGE-PIC-NEXT: .L11 $pb:
511
- ; LARGE-PIC-NEXT: leaq .L11 $pb(%rip), %rax
512
- ; LARGE-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L11 $pb, %rcx
558
+ ; LARGE-PIC-NEXT: .L12 $pb:
559
+ ; LARGE-PIC-NEXT: leaq .L12 $pb(%rip), %rax
560
+ ; LARGE-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L12 $pb, %rcx
513
561
; LARGE-PIC-NEXT: addq %rax, %rcx
514
562
; LARGE-PIC-NEXT: movabsq $extern_fn@GOT, %rax
515
563
; LARGE-PIC-NEXT: movq (%rcx,%rax), %rax
@@ -585,9 +633,9 @@ define dso_local float @load_constant_pool(float %x) #0 {
585
633
;
586
634
; LARGE-PIC-LABEL: load_constant_pool:
587
635
; LARGE-PIC: # %bb.0:
588
- ; LARGE-PIC-NEXT: .L13 $pb:
589
- ; LARGE-PIC-NEXT: leaq .L13 $pb(%rip), %rax
590
- ; LARGE-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L13 $pb, %rcx
636
+ ; LARGE-PIC-NEXT: .L14 $pb:
637
+ ; LARGE-PIC-NEXT: leaq .L14 $pb(%rip), %rax
638
+ ; LARGE-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L14 $pb, %rcx
591
639
; LARGE-PIC-NEXT: addq %rax, %rcx
592
640
; LARGE-PIC-NEXT: movabsq ${{\.?LCPI[0-9]+_[0-9]+}}@GOTOFF, %rax
593
641
; LARGE-PIC-NEXT: addss (%rcx,%rax), %xmm0
0 commit comments