@@ -58,6 +58,8 @@ target triple = "x86_64--linux"
58
58
@forced_small_data = dso_local global [10 x i32 ] zeroinitializer , code_model "small" , align 16
59
59
@forced_large_data = dso_local global [10 x i32 ] zeroinitializer , code_model "large" , align 16
60
60
@__ehdr_start = external dso_local global i8
61
+ @__start_foo = external dso_local global i8
62
+ @__stop_foo = external dso_local global i8
61
63
62
64
define dso_local ptr @lea_static_data () #0 {
63
65
; SMALL-STATIC-LABEL: lea_static_data:
@@ -858,6 +860,120 @@ define dso_local ptr @lea_ehdr_start() #0 {
858
860
ret ptr @__ehdr_start
859
861
}
860
862
863
+ define dso_local ptr @lea_start_foo () #0 {
864
+ ; SMALL-STATIC-LABEL: lea_start_foo:
865
+ ; SMALL-STATIC: # %bb.0:
866
+ ; SMALL-STATIC-NEXT: movl $__start_foo, %eax
867
+ ; SMALL-STATIC-NEXT: retq
868
+ ;
869
+ ; MEDIUM-STATIC-LABEL: lea_start_foo:
870
+ ; MEDIUM-STATIC: # %bb.0:
871
+ ; MEDIUM-STATIC-NEXT: movabsq $__start_foo, %rax
872
+ ; MEDIUM-STATIC-NEXT: retq
873
+ ;
874
+ ; LARGE-STATIC-LABEL: lea_start_foo:
875
+ ; LARGE-STATIC: # %bb.0:
876
+ ; LARGE-STATIC-NEXT: movabsq $__start_foo, %rax
877
+ ; LARGE-STATIC-NEXT: retq
878
+ ;
879
+ ; SMALL-PIC-LABEL: lea_start_foo:
880
+ ; SMALL-PIC: # %bb.0:
881
+ ; SMALL-PIC-NEXT: leaq __start_foo(%rip), %rax
882
+ ; SMALL-PIC-NEXT: retq
883
+ ;
884
+ ; MEDIUM-SMALL-DATA-PIC-LABEL: lea_start_foo:
885
+ ; MEDIUM-SMALL-DATA-PIC: # %bb.0:
886
+ ; MEDIUM-SMALL-DATA-PIC-NEXT: leaq _GLOBAL_OFFSET_TABLE_(%rip), %rcx
887
+ ; MEDIUM-SMALL-DATA-PIC-NEXT: movabsq $__start_foo@GOTOFF, %rax
888
+ ; MEDIUM-SMALL-DATA-PIC-NEXT: addq %rcx, %rax
889
+ ; MEDIUM-SMALL-DATA-PIC-NEXT: retq
890
+ ;
891
+ ; MEDIUM-PIC-LABEL: lea_start_foo:
892
+ ; MEDIUM-PIC: # %bb.0:
893
+ ; MEDIUM-PIC-NEXT: leaq _GLOBAL_OFFSET_TABLE_(%rip), %rcx
894
+ ; MEDIUM-PIC-NEXT: movabsq $__start_foo@GOTOFF, %rax
895
+ ; MEDIUM-PIC-NEXT: addq %rcx, %rax
896
+ ; MEDIUM-PIC-NEXT: retq
897
+ ;
898
+ ; LARGE-PIC-LABEL: lea_start_foo:
899
+ ; LARGE-PIC: # %bb.0:
900
+ ; LARGE-PIC-NEXT: .L14$pb:
901
+ ; LARGE-PIC-NEXT: leaq .L14$pb(%rip), %rax
902
+ ; LARGE-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L14$pb, %rcx
903
+ ; LARGE-PIC-NEXT: addq %rax, %rcx
904
+ ; LARGE-PIC-NEXT: movabsq $__start_foo@GOTOFF, %rax
905
+ ; LARGE-PIC-NEXT: addq %rcx, %rax
906
+ ; LARGE-PIC-NEXT: retq
907
+ ;
908
+ ; LARGE-SMALL-DATA-PIC-LABEL: lea_start_foo:
909
+ ; LARGE-SMALL-DATA-PIC: # %bb.0:
910
+ ; LARGE-SMALL-DATA-PIC-NEXT: .L14$pb:
911
+ ; LARGE-SMALL-DATA-PIC-NEXT: leaq .L14$pb(%rip), %rax
912
+ ; LARGE-SMALL-DATA-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L14$pb, %rcx
913
+ ; LARGE-SMALL-DATA-PIC-NEXT: addq %rax, %rcx
914
+ ; LARGE-SMALL-DATA-PIC-NEXT: movabsq $__start_foo@GOTOFF, %rax
915
+ ; LARGE-SMALL-DATA-PIC-NEXT: addq %rcx, %rax
916
+ ; LARGE-SMALL-DATA-PIC-NEXT: retq
917
+ ret ptr @__start_foo
918
+ }
919
+
920
+ define dso_local ptr @lea_stop_foo () #0 {
921
+ ; SMALL-STATIC-LABEL: lea_stop_foo:
922
+ ; SMALL-STATIC: # %bb.0:
923
+ ; SMALL-STATIC-NEXT: movl $__stop_foo, %eax
924
+ ; SMALL-STATIC-NEXT: retq
925
+ ;
926
+ ; MEDIUM-STATIC-LABEL: lea_stop_foo:
927
+ ; MEDIUM-STATIC: # %bb.0:
928
+ ; MEDIUM-STATIC-NEXT: movabsq $__stop_foo, %rax
929
+ ; MEDIUM-STATIC-NEXT: retq
930
+ ;
931
+ ; LARGE-STATIC-LABEL: lea_stop_foo:
932
+ ; LARGE-STATIC: # %bb.0:
933
+ ; LARGE-STATIC-NEXT: movabsq $__stop_foo, %rax
934
+ ; LARGE-STATIC-NEXT: retq
935
+ ;
936
+ ; SMALL-PIC-LABEL: lea_stop_foo:
937
+ ; SMALL-PIC: # %bb.0:
938
+ ; SMALL-PIC-NEXT: leaq __stop_foo(%rip), %rax
939
+ ; SMALL-PIC-NEXT: retq
940
+ ;
941
+ ; MEDIUM-SMALL-DATA-PIC-LABEL: lea_stop_foo:
942
+ ; MEDIUM-SMALL-DATA-PIC: # %bb.0:
943
+ ; MEDIUM-SMALL-DATA-PIC-NEXT: leaq _GLOBAL_OFFSET_TABLE_(%rip), %rcx
944
+ ; MEDIUM-SMALL-DATA-PIC-NEXT: movabsq $__stop_foo@GOTOFF, %rax
945
+ ; MEDIUM-SMALL-DATA-PIC-NEXT: addq %rcx, %rax
946
+ ; MEDIUM-SMALL-DATA-PIC-NEXT: retq
947
+ ;
948
+ ; MEDIUM-PIC-LABEL: lea_stop_foo:
949
+ ; MEDIUM-PIC: # %bb.0:
950
+ ; MEDIUM-PIC-NEXT: leaq _GLOBAL_OFFSET_TABLE_(%rip), %rcx
951
+ ; MEDIUM-PIC-NEXT: movabsq $__stop_foo@GOTOFF, %rax
952
+ ; MEDIUM-PIC-NEXT: addq %rcx, %rax
953
+ ; MEDIUM-PIC-NEXT: retq
954
+ ;
955
+ ; LARGE-PIC-LABEL: lea_stop_foo:
956
+ ; LARGE-PIC: # %bb.0:
957
+ ; LARGE-PIC-NEXT: .L15$pb:
958
+ ; LARGE-PIC-NEXT: leaq .L15$pb(%rip), %rax
959
+ ; LARGE-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L15$pb, %rcx
960
+ ; LARGE-PIC-NEXT: addq %rax, %rcx
961
+ ; LARGE-PIC-NEXT: movabsq $__stop_foo@GOTOFF, %rax
962
+ ; LARGE-PIC-NEXT: addq %rcx, %rax
963
+ ; LARGE-PIC-NEXT: retq
964
+ ;
965
+ ; LARGE-SMALL-DATA-PIC-LABEL: lea_stop_foo:
966
+ ; LARGE-SMALL-DATA-PIC: # %bb.0:
967
+ ; LARGE-SMALL-DATA-PIC-NEXT: .L15$pb:
968
+ ; LARGE-SMALL-DATA-PIC-NEXT: leaq .L15$pb(%rip), %rax
969
+ ; LARGE-SMALL-DATA-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L15$pb, %rcx
970
+ ; LARGE-SMALL-DATA-PIC-NEXT: addq %rax, %rcx
971
+ ; LARGE-SMALL-DATA-PIC-NEXT: movabsq $__stop_foo@GOTOFF, %rax
972
+ ; LARGE-SMALL-DATA-PIC-NEXT: addq %rcx, %rax
973
+ ; LARGE-SMALL-DATA-PIC-NEXT: retq
974
+ ret ptr @__stop_foo
975
+ }
976
+
861
977
define dso_local void @global_fn () #0 {
862
978
; CHECK-LABEL: global_fn:
863
979
; CHECK: # %bb.0:
@@ -919,19 +1035,19 @@ define dso_local ptr @lea_static_fn() #0 {
919
1035
;
920
1036
; LARGE-PIC-LABEL: lea_static_fn:
921
1037
; LARGE-PIC: # %bb.0:
922
- ; LARGE-PIC-NEXT: .L17 $pb:
923
- ; LARGE-PIC-NEXT: leaq .L17 $pb(%rip), %rax
924
- ; LARGE-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L17 $pb, %rcx
1038
+ ; LARGE-PIC-NEXT: .L19 $pb:
1039
+ ; LARGE-PIC-NEXT: leaq .L19 $pb(%rip), %rax
1040
+ ; LARGE-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L19 $pb, %rcx
925
1041
; LARGE-PIC-NEXT: addq %rax, %rcx
926
1042
; LARGE-PIC-NEXT: movabsq $static_fn@GOTOFF, %rax
927
1043
; LARGE-PIC-NEXT: addq %rcx, %rax
928
1044
; LARGE-PIC-NEXT: retq
929
1045
;
930
1046
; LARGE-SMALL-DATA-PIC-LABEL: lea_static_fn:
931
1047
; LARGE-SMALL-DATA-PIC: # %bb.0:
932
- ; LARGE-SMALL-DATA-PIC-NEXT: .L17 $pb:
933
- ; LARGE-SMALL-DATA-PIC-NEXT: leaq .L17 $pb(%rip), %rax
934
- ; LARGE-SMALL-DATA-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L17 $pb, %rcx
1048
+ ; LARGE-SMALL-DATA-PIC-NEXT: .L19 $pb:
1049
+ ; LARGE-SMALL-DATA-PIC-NEXT: leaq .L19 $pb(%rip), %rax
1050
+ ; LARGE-SMALL-DATA-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L19 $pb, %rcx
935
1051
; LARGE-SMALL-DATA-PIC-NEXT: addq %rax, %rcx
936
1052
; LARGE-SMALL-DATA-PIC-NEXT: movabsq $static_fn@GOTOFF, %rax
937
1053
; LARGE-SMALL-DATA-PIC-NEXT: addq %rcx, %rax
@@ -972,19 +1088,19 @@ define dso_local ptr @lea_global_fn() #0 {
972
1088
;
973
1089
; LARGE-PIC-LABEL: lea_global_fn:
974
1090
; LARGE-PIC: # %bb.0:
975
- ; LARGE-PIC-NEXT: .L18 $pb:
976
- ; LARGE-PIC-NEXT: leaq .L18 $pb(%rip), %rax
977
- ; LARGE-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L18 $pb, %rcx
1091
+ ; LARGE-PIC-NEXT: .L20 $pb:
1092
+ ; LARGE-PIC-NEXT: leaq .L20 $pb(%rip), %rax
1093
+ ; LARGE-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L20 $pb, %rcx
978
1094
; LARGE-PIC-NEXT: addq %rax, %rcx
979
1095
; LARGE-PIC-NEXT: movabsq $global_fn@GOTOFF, %rax
980
1096
; LARGE-PIC-NEXT: addq %rcx, %rax
981
1097
; LARGE-PIC-NEXT: retq
982
1098
;
983
1099
; LARGE-SMALL-DATA-PIC-LABEL: lea_global_fn:
984
1100
; LARGE-SMALL-DATA-PIC: # %bb.0:
985
- ; LARGE-SMALL-DATA-PIC-NEXT: .L18 $pb:
986
- ; LARGE-SMALL-DATA-PIC-NEXT: leaq .L18 $pb(%rip), %rax
987
- ; LARGE-SMALL-DATA-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L18 $pb, %rcx
1101
+ ; LARGE-SMALL-DATA-PIC-NEXT: .L20 $pb:
1102
+ ; LARGE-SMALL-DATA-PIC-NEXT: leaq .L20 $pb(%rip), %rax
1103
+ ; LARGE-SMALL-DATA-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L20 $pb, %rcx
988
1104
; LARGE-SMALL-DATA-PIC-NEXT: addq %rax, %rcx
989
1105
; LARGE-SMALL-DATA-PIC-NEXT: movabsq $global_fn@GOTOFF, %rax
990
1106
; LARGE-SMALL-DATA-PIC-NEXT: addq %rcx, %rax
@@ -1025,19 +1141,19 @@ define dso_local ptr @lea_extern_fn() #0 {
1025
1141
;
1026
1142
; LARGE-PIC-LABEL: lea_extern_fn:
1027
1143
; LARGE-PIC: # %bb.0:
1028
- ; LARGE-PIC-NEXT: .L19 $pb:
1029
- ; LARGE-PIC-NEXT: leaq .L19 $pb(%rip), %rax
1030
- ; LARGE-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L19 $pb, %rcx
1144
+ ; LARGE-PIC-NEXT: .L21 $pb:
1145
+ ; LARGE-PIC-NEXT: leaq .L21 $pb(%rip), %rax
1146
+ ; LARGE-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L21 $pb, %rcx
1031
1147
; LARGE-PIC-NEXT: addq %rax, %rcx
1032
1148
; LARGE-PIC-NEXT: movabsq $extern_fn@GOT, %rax
1033
1149
; LARGE-PIC-NEXT: movq (%rcx,%rax), %rax
1034
1150
; LARGE-PIC-NEXT: retq
1035
1151
;
1036
1152
; LARGE-SMALL-DATA-PIC-LABEL: lea_extern_fn:
1037
1153
; LARGE-SMALL-DATA-PIC: # %bb.0:
1038
- ; LARGE-SMALL-DATA-PIC-NEXT: .L19 $pb:
1039
- ; LARGE-SMALL-DATA-PIC-NEXT: leaq .L19 $pb(%rip), %rax
1040
- ; LARGE-SMALL-DATA-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L19 $pb, %rcx
1154
+ ; LARGE-SMALL-DATA-PIC-NEXT: .L21 $pb:
1155
+ ; LARGE-SMALL-DATA-PIC-NEXT: leaq .L21 $pb(%rip), %rax
1156
+ ; LARGE-SMALL-DATA-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L21 $pb, %rcx
1041
1157
; LARGE-SMALL-DATA-PIC-NEXT: addq %rax, %rcx
1042
1158
; LARGE-SMALL-DATA-PIC-NEXT: movabsq $extern_fn@GOT, %rax
1043
1159
; LARGE-SMALL-DATA-PIC-NEXT: movq (%rcx,%rax), %rax
@@ -1078,19 +1194,19 @@ define dso_local ptr @lea_ifunc() #0 {
1078
1194
;
1079
1195
; LARGE-PIC-LABEL: lea_ifunc:
1080
1196
; LARGE-PIC: # %bb.0:
1081
- ; LARGE-PIC-NEXT: .L20 $pb:
1082
- ; LARGE-PIC-NEXT: leaq .L20 $pb(%rip), %rax
1083
- ; LARGE-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L20 $pb, %rcx
1197
+ ; LARGE-PIC-NEXT: .L22 $pb:
1198
+ ; LARGE-PIC-NEXT: leaq .L22 $pb(%rip), %rax
1199
+ ; LARGE-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L22 $pb, %rcx
1084
1200
; LARGE-PIC-NEXT: addq %rax, %rcx
1085
1201
; LARGE-PIC-NEXT: movabsq $ifunc_func@GOT, %rax
1086
1202
; LARGE-PIC-NEXT: movq (%rcx,%rax), %rax
1087
1203
; LARGE-PIC-NEXT: retq
1088
1204
;
1089
1205
; LARGE-SMALL-DATA-PIC-LABEL: lea_ifunc:
1090
1206
; LARGE-SMALL-DATA-PIC: # %bb.0:
1091
- ; LARGE-SMALL-DATA-PIC-NEXT: .L20 $pb:
1092
- ; LARGE-SMALL-DATA-PIC-NEXT: leaq .L20 $pb(%rip), %rax
1093
- ; LARGE-SMALL-DATA-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L20 $pb, %rcx
1207
+ ; LARGE-SMALL-DATA-PIC-NEXT: .L22 $pb:
1208
+ ; LARGE-SMALL-DATA-PIC-NEXT: leaq .L22 $pb(%rip), %rax
1209
+ ; LARGE-SMALL-DATA-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L22 $pb, %rcx
1094
1210
; LARGE-SMALL-DATA-PIC-NEXT: addq %rax, %rcx
1095
1211
; LARGE-SMALL-DATA-PIC-NEXT: movabsq $ifunc_func@GOT, %rax
1096
1212
; LARGE-SMALL-DATA-PIC-NEXT: movq (%rcx,%rax), %rax
@@ -1131,19 +1247,19 @@ define dso_local ptr @lea_dso_local_ifunc() #0 {
1131
1247
;
1132
1248
; LARGE-PIC-LABEL: lea_dso_local_ifunc:
1133
1249
; LARGE-PIC: # %bb.0:
1134
- ; LARGE-PIC-NEXT: .L21 $pb:
1135
- ; LARGE-PIC-NEXT: leaq .L21 $pb(%rip), %rax
1136
- ; LARGE-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L21 $pb, %rcx
1250
+ ; LARGE-PIC-NEXT: .L23 $pb:
1251
+ ; LARGE-PIC-NEXT: leaq .L23 $pb(%rip), %rax
1252
+ ; LARGE-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L23 $pb, %rcx
1137
1253
; LARGE-PIC-NEXT: addq %rax, %rcx
1138
1254
; LARGE-PIC-NEXT: movabsq $dso_local_ifunc_func@GOTOFF, %rax
1139
1255
; LARGE-PIC-NEXT: addq %rcx, %rax
1140
1256
; LARGE-PIC-NEXT: retq
1141
1257
;
1142
1258
; LARGE-SMALL-DATA-PIC-LABEL: lea_dso_local_ifunc:
1143
1259
; LARGE-SMALL-DATA-PIC: # %bb.0:
1144
- ; LARGE-SMALL-DATA-PIC-NEXT: .L21 $pb:
1145
- ; LARGE-SMALL-DATA-PIC-NEXT: leaq .L21 $pb(%rip), %rax
1146
- ; LARGE-SMALL-DATA-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L21 $pb, %rcx
1260
+ ; LARGE-SMALL-DATA-PIC-NEXT: .L23 $pb:
1261
+ ; LARGE-SMALL-DATA-PIC-NEXT: leaq .L23 $pb(%rip), %rax
1262
+ ; LARGE-SMALL-DATA-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L23 $pb, %rcx
1147
1263
; LARGE-SMALL-DATA-PIC-NEXT: addq %rax, %rcx
1148
1264
; LARGE-SMALL-DATA-PIC-NEXT: movabsq $dso_local_ifunc_func@GOTOFF, %rax
1149
1265
; LARGE-SMALL-DATA-PIC-NEXT: addq %rcx, %rax
@@ -1218,19 +1334,19 @@ define dso_local float @load_constant_pool(float %x) #0 {
1218
1334
;
1219
1335
; LARGE-PIC-LABEL: load_constant_pool:
1220
1336
; LARGE-PIC: # %bb.0:
1221
- ; LARGE-PIC-NEXT: .L23 $pb:
1222
- ; LARGE-PIC-NEXT: leaq .L23 $pb(%rip), %rax
1223
- ; LARGE-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L23 $pb, %rcx
1337
+ ; LARGE-PIC-NEXT: .L25 $pb:
1338
+ ; LARGE-PIC-NEXT: leaq .L25 $pb(%rip), %rax
1339
+ ; LARGE-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L25 $pb, %rcx
1224
1340
; LARGE-PIC-NEXT: addq %rax, %rcx
1225
1341
; LARGE-PIC-NEXT: movabsq ${{\.?LCPI[0-9]+_[0-9]+}}@GOTOFF, %rax
1226
1342
; LARGE-PIC-NEXT: addss (%rcx,%rax), %xmm0
1227
1343
; LARGE-PIC-NEXT: retq
1228
1344
;
1229
1345
; LARGE-SMALL-DATA-PIC-LABEL: load_constant_pool:
1230
1346
; LARGE-SMALL-DATA-PIC: # %bb.0:
1231
- ; LARGE-SMALL-DATA-PIC-NEXT: .L23 $pb:
1232
- ; LARGE-SMALL-DATA-PIC-NEXT: leaq .L23 $pb(%rip), %rax
1233
- ; LARGE-SMALL-DATA-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L23 $pb, %rcx
1347
+ ; LARGE-SMALL-DATA-PIC-NEXT: .L25 $pb:
1348
+ ; LARGE-SMALL-DATA-PIC-NEXT: leaq .L25 $pb(%rip), %rax
1349
+ ; LARGE-SMALL-DATA-PIC-NEXT: movabsq $_GLOBAL_OFFSET_TABLE_-.L25 $pb, %rcx
1234
1350
; LARGE-SMALL-DATA-PIC-NEXT: addq %rax, %rcx
1235
1351
; LARGE-SMALL-DATA-PIC-NEXT: movabsq ${{\.?LCPI[0-9]+_[0-9]+}}@GOTOFF, %rax
1236
1352
; LARGE-SMALL-DATA-PIC-NEXT: addss (%rcx,%rax), %xmm0
0 commit comments