@@ -58,6 +58,8 @@ target triple = "x86_64--linux"
5858@forced_small_data = dso_local global [10 x i32 ] zeroinitializer , code_model "small" , align 16
5959@forced_large_data = dso_local global [10 x i32 ] zeroinitializer , code_model "large" , align 16
6060@__ehdr_start = external dso_local global i8
61+ @__start_foo = external dso_local global i8
62+ @__stop_foo = external dso_local global i8
6163
6264define dso_local ptr @lea_static_data () #0 {
6365; SMALL-STATIC-LABEL: lea_static_data:
@@ -858,6 +860,120 @@ define dso_local ptr @lea_ehdr_start() #0 {
858860 ret ptr @__ehdr_start
859861}
860862
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+
861977define dso_local void @global_fn () #0 {
862978; CHECK-LABEL: global_fn:
863979; CHECK: # %bb.0:
@@ -919,19 +1035,19 @@ define dso_local ptr @lea_static_fn() #0 {
9191035;
9201036; LARGE-PIC-LABEL: lea_static_fn:
9211037; 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
9251041; LARGE-PIC-NEXT: addq %rax, %rcx
9261042; LARGE-PIC-NEXT: movabsq $static_fn@GOTOFF, %rax
9271043; LARGE-PIC-NEXT: addq %rcx, %rax
9281044; LARGE-PIC-NEXT: retq
9291045;
9301046; LARGE-SMALL-DATA-PIC-LABEL: lea_static_fn:
9311047; 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
9351051; LARGE-SMALL-DATA-PIC-NEXT: addq %rax, %rcx
9361052; LARGE-SMALL-DATA-PIC-NEXT: movabsq $static_fn@GOTOFF, %rax
9371053; LARGE-SMALL-DATA-PIC-NEXT: addq %rcx, %rax
@@ -972,19 +1088,19 @@ define dso_local ptr @lea_global_fn() #0 {
9721088;
9731089; LARGE-PIC-LABEL: lea_global_fn:
9741090; 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
9781094; LARGE-PIC-NEXT: addq %rax, %rcx
9791095; LARGE-PIC-NEXT: movabsq $global_fn@GOTOFF, %rax
9801096; LARGE-PIC-NEXT: addq %rcx, %rax
9811097; LARGE-PIC-NEXT: retq
9821098;
9831099; LARGE-SMALL-DATA-PIC-LABEL: lea_global_fn:
9841100; 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
9881104; LARGE-SMALL-DATA-PIC-NEXT: addq %rax, %rcx
9891105; LARGE-SMALL-DATA-PIC-NEXT: movabsq $global_fn@GOTOFF, %rax
9901106; LARGE-SMALL-DATA-PIC-NEXT: addq %rcx, %rax
@@ -1025,19 +1141,19 @@ define dso_local ptr @lea_extern_fn() #0 {
10251141;
10261142; LARGE-PIC-LABEL: lea_extern_fn:
10271143; 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
10311147; LARGE-PIC-NEXT: addq %rax, %rcx
10321148; LARGE-PIC-NEXT: movabsq $extern_fn@GOT, %rax
10331149; LARGE-PIC-NEXT: movq (%rcx,%rax), %rax
10341150; LARGE-PIC-NEXT: retq
10351151;
10361152; LARGE-SMALL-DATA-PIC-LABEL: lea_extern_fn:
10371153; 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
10411157; LARGE-SMALL-DATA-PIC-NEXT: addq %rax, %rcx
10421158; LARGE-SMALL-DATA-PIC-NEXT: movabsq $extern_fn@GOT, %rax
10431159; LARGE-SMALL-DATA-PIC-NEXT: movq (%rcx,%rax), %rax
@@ -1078,19 +1194,19 @@ define dso_local ptr @lea_ifunc() #0 {
10781194;
10791195; LARGE-PIC-LABEL: lea_ifunc:
10801196; 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
10841200; LARGE-PIC-NEXT: addq %rax, %rcx
10851201; LARGE-PIC-NEXT: movabsq $ifunc_func@GOT, %rax
10861202; LARGE-PIC-NEXT: movq (%rcx,%rax), %rax
10871203; LARGE-PIC-NEXT: retq
10881204;
10891205; LARGE-SMALL-DATA-PIC-LABEL: lea_ifunc:
10901206; 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
10941210; LARGE-SMALL-DATA-PIC-NEXT: addq %rax, %rcx
10951211; LARGE-SMALL-DATA-PIC-NEXT: movabsq $ifunc_func@GOT, %rax
10961212; LARGE-SMALL-DATA-PIC-NEXT: movq (%rcx,%rax), %rax
@@ -1131,19 +1247,19 @@ define dso_local ptr @lea_dso_local_ifunc() #0 {
11311247;
11321248; LARGE-PIC-LABEL: lea_dso_local_ifunc:
11331249; 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
11371253; LARGE-PIC-NEXT: addq %rax, %rcx
11381254; LARGE-PIC-NEXT: movabsq $dso_local_ifunc_func@GOTOFF, %rax
11391255; LARGE-PIC-NEXT: addq %rcx, %rax
11401256; LARGE-PIC-NEXT: retq
11411257;
11421258; LARGE-SMALL-DATA-PIC-LABEL: lea_dso_local_ifunc:
11431259; 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
11471263; LARGE-SMALL-DATA-PIC-NEXT: addq %rax, %rcx
11481264; LARGE-SMALL-DATA-PIC-NEXT: movabsq $dso_local_ifunc_func@GOTOFF, %rax
11491265; LARGE-SMALL-DATA-PIC-NEXT: addq %rcx, %rax
@@ -1218,19 +1334,19 @@ define dso_local float @load_constant_pool(float %x) #0 {
12181334;
12191335; LARGE-PIC-LABEL: load_constant_pool:
12201336; 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
12241340; LARGE-PIC-NEXT: addq %rax, %rcx
12251341; LARGE-PIC-NEXT: movabsq ${{\.?LCPI[0-9]+_[0-9]+}}@GOTOFF, %rax
12261342; LARGE-PIC-NEXT: addss (%rcx,%rax), %xmm0
12271343; LARGE-PIC-NEXT: retq
12281344;
12291345; LARGE-SMALL-DATA-PIC-LABEL: load_constant_pool:
12301346; 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
12341350; LARGE-SMALL-DATA-PIC-NEXT: addq %rax, %rcx
12351351; LARGE-SMALL-DATA-PIC-NEXT: movabsq ${{\.?LCPI[0-9]+_[0-9]+}}@GOTOFF, %rax
12361352; LARGE-SMALL-DATA-PIC-NEXT: addss (%rcx,%rax), %xmm0
0 commit comments